/**
 * @file   1032.cpp
 * @author Shuang Hu <hsmath@ubuntu>
 * @date   Thu May 13 19:15:55 2021
 * 
 * @brief  PAT 1032
 * 
 * 
 */
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
class Node{
public:
    int myadd;
    int nextadd;
    char data;
};
class List{
private:
    map<int,Node> addtoN;
    vector<int> listadd1;
    vector<int> listadd2;
    int nodenum;
    int root1;
    int root2;
public:
    List();
    void traverse();
    void compare();
};
List::List(){
    cin>>root1>>root2>>nodenum;
    for(int i=0;i<nodenum;i++){
	int add1,add2;
	char c;
	cin>>add1>>c>>add2;
	Node N;
	N.myadd=add1;
	N.data=c;
	N.nextadd=add2;
	addtoN[add1]=N;
    }
}
void List::traverse(){
    int r=root1;
    while(r!=-1){
	listadd1.push_back(r);
	r=addtoN[r].nextadd;
    }
    r=root2;
    while(r!=-1){
	listadd2.push_back(r);
	r=addtoN[r].nextadd;
    }
}
void print(int i){
    if(i>=10000){
    }else if(i>=1000){
	cout<<"0";
    }else if(i>=100){
	cout<<"00";
    }else if(i>=10){
	cout<<"000";
    }else{
	cout<<"0000";
    }
    cout<<i<<endl;
}
void List::compare(){
    map<int,bool> shown;
    for(int i=0;i<listadd1.size();i++){
	shown[listadd1[i]]=true;
    }
    bool found=false;
    for(int i=0;i<listadd2.size();i++){
	if(shown[listadd2[i]]==true){
	    found=true;
	    print(listadd2[i]);
	    break;
	}
    }
    if(found==false){
	cout<<"-1"<<endl;
    }
}
int main(){
    List L;
    L.traverse();
    L.compare();
}
